package com.ruoyi.product.service;

import com.ruoyi.manufacturer.domain.DjManufacturer;
import com.ruoyi.product.domain.PictureMemory;
import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductAll;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.product.domain.ProductRelation;
import com.ruoyi.productProof.domain.ProductProof;
import com.ruoyi.scope.domain.Scope;
import com.ruoyi.warehousing.domain.WarehouseStatisticsVo;
import org.springframework.security.core.parameters.P;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

public interface ProductServer {
    /**
     * 查询产品信息
     *
     * @return 结果集
     */
    List<Product> selectProductList(Product product);

    List<Product> selectProductProofListes(List<Map> saleGoodsModelMaps);

    /**
     * 查询产品规格信息
     *
     * @param modelCode 产品型号唯一码
     * @return 结果
     */
    ProductModel selectProductByModelCode(Long supplierId, String modelCode);


    public void importProduct(InputStream inputStream) throws IOException;

    /**
     * 插入产品信息
     *
     * @param product 产品信息
     * @return 结果
     */
    String insertProduct(Product product, List<ProductModel> productModel, List<ProductRelation> productRelations);

    Product selectProductProofByMap(Map map);

    /**
     * 删除产品信息
     *
     * @param productId 需要删除的产品ID
     * @return 结果
     */
    int removeProduct(Long productId);

    /**
     * 查询生产管理类别
     *
     * @param managementCategory 管理类别
     * @return 结果
     */
    List<Scope> selectManagementCategory(Long managementCategory);

    /**
     * 查询生产厂商
     *
     * @return 结果
     */
    List<DjManufacturer> selectManufacturer(Long companyId);

    /**
     * 根据主键查询产品信息
     *
     * @param productId 产品主键
     * @return 结果
     */
    Product selectProductById(Product productId);

    /**
     * 根据主键查询产品规格信息
     *
     * @param productId 产品主键
     * @return 结果
     */
    List<ProductModel> selectProductByModelId(Product productId);

    /**
     * 修改产品信息
     *
     * @param product 产品信息集
     * @return 结果
     */
    String updateProduct(ProductAll productAll);

    /**
     * 查询产品图片信息
     *
     * @param modelNo 产品规格主键
     * @return 结果
     */
    List<PictureMemory> selectProductImg(Long modelNo);

    /**
     * 查询产品的规格型号是否唯一
     *
     * @param productModel
     * @return
     */
    Long selectProductProductType(ProductModel productModel);

    /**
     * 查询产品的产品唯一码是否唯一
     *
     * @param productModel 产品信息
     * @return 结果
     */
    Long selectProductModelCode(ProductModel productModel);

    /**
     * 生成生产日期
     *
     * @param effectiveDate 失效日期
     * @param productId     产品主键
     * @return 结果
     */
    String calculateDate(String effectiveDate, Long productId);

    /**
     * 查询是否有产品使用该供应商
     *
     * @param productModel 产品型号规格
     * @return 结果
     */
    List<ProductModel> selectProductModel(ProductModel productModel);

    /**
     * 根据产品ID和产品型号修改对应的 选择查询的天数 和 采购周期的时间
     * params:{
     "productId": '产品ID',
     "productType":"产品型号",
     "purchase_cycle":"60",
     "select_cycle":"180"
     * }
     * @param params
     * @return
     */
    List<WarehouseStatisticsVo> updateByPiAPt(Map<String, Object> params);
}
